Θέλετε να βελτιώσετε αυτήν την ανάρτηση; Δώστε λεπτομερείς απαντήσεις σε αυτήν την ερώτηση, συμπεριλαμβανομένων των παραθέσεων και μια εξήγηση για το γιατί η απάντησή σας είναι σωστή. Οι απαντήσεις χωρίς αρκετές λεπτομέρειες μπορούν να επεξεργαστούν ή να διαγραφούν. Πρόσθετα κατά λάθος αρχεία στο Git χρησιμοποιώντας την εντολή: git προσθέστε myfile.txt Δεν έχω εκτελέσει ακόμα το git commit. Υπάρχει τρόπος να αναιρέσετε αυτό, επομένως αυτά τα αρχεία δεν θα συμπεριληφθούν στη δέσμευση;
2020-12-07 21:20:37
1 2 Επόμενο Μπορείτε να αναιρέσετε το git add πριν από τη δέσμευση με επαναφορά gitτο οποίο θα το αφαιρέσει από τον τρέχοντα ευρετήριο (τη λίστα "πρόκειται να δεσμευτεί") χωρίς να αλλάξει τίποτα άλλο. Μπορείς να χρησιμοποιήσεις επαναφορά git χωρίς κανένα όνομα αρχείου για να αποσυμπιέσετε όλες τις απαραίτητες αλλαγές. Αυτό μπορεί να είναι χρήσιμο όταν υπάρχουν πάρα πολλά αρχεία για να αναφερθούν ένα προς ένα σε εύλογο χρονικό διάστημα. Σε παλιές εκδόσεις του Git, οι παραπάνω εντολές είναι ισοδύναμες με το git reset HEAD και το git reset HEAD αντίστοιχα, και θα αποτύχουν εάν το HEAD είναι απροσδιόριστο (επειδή δεν έχετε κάνει ακόμη δεσμεύσεις στο αποθετήριο σας) ή διφορούμενο δημιούργησε ένα υποκατάστημα που ονομάζεται HEAD, το οποίο είναι ένα ηλίθιο πράγμα που δεν πρέπει να κάνετε). Αυτό άλλαξε στο Git 1.8.2, ωστόσο, στις σύγχρονες εκδόσεις του Git μπορείτε να χρησιμοποιήσετε τις παραπάνω εντολές ακόμη και πριν κάνετε την πρώτη σας δέσμευση: "git reset" (χωρίς επιλογές ή παραμέτρους) που χρησιμοποιείται για σφάλμα όταν δεν έχετε δεσμεύσεις στην ιστορία σας, αλλά τώρα σας δίνει ένα κενό ευρετήριο (για να ταιριάζει με ανύπαρκτη δέσμευση που δεν είστε καν ενεργοποιημένος). Τεκμηρίωση: επαναφορά git | Θέλεις: git rm - αποθηκευμένο Αιτιολογία: Όταν ήμουν νέος σε αυτό, προσπάθησα για πρώτη φορά επαναφορά git. (για να αναιρέσω ολόκληρη την αρχική μου προσθήκη), μόνο για να λάβω αυτό το (όχι τόσο) χρήσιμο μήνυμα: μοιραίο: Αποτυχία επίλυσης του "HEAD" ως έγκυρης αναφοράς. Αποδεικνύεται ότι αυτό συμβαίνει επειδή το HEAD ref (κλάδος;) δεν υπάρχει μόνο μετά την πρώτη δέσμευση. Δηλαδή, θα αντιμετωπίσετε το ίδιο πρόβλημα για αρχάριους με εμένα εάν η ροή εργασίας σας, όπως η δική μου, ήταν κάτι σαν: cd στον υπέροχο νέο μου κατάλογο έργων για να δοκιμάσω το Git, το νέο hotness git init git add. κατάσταση git ... πολλές κύλινδροι χάλια κατά ... => Γαμώτο, δεν ήθελα να προσθέσω όλα αυτά. google "αναίρεση προσθήκης git" => βρείτε Stack Overflow - ναι επαναφορά git. => θανατηφόρος: Αποτυχία επίλυσης του "HEAD" ως έγκυρης αναφοράς. Αποδεικνύεται περαιτέρω ότι υπάρχει ένα σφάλμα που καταγράφηκε ενάντια στη δυσπιστία αυτού του στη λίστα αλληλογραφίας. Και ότι η σωστή λύση ήταν εκεί στην έξοδο κατάστασης Git (η οποία, ναι, λάμψα ως «χάλια») ... # Αλλαγές που πρέπει να πραγματοποιηθούν: # (χρησιμοποιήστε "git rm - cached ..." για να σταματήσετε) ... Και η λύση είναι πράγματι να χρησιμοποιήσετε το GIT rm - cache FILE. Σημειώστε τις προειδοποιήσεις αλλού εδώ - το git rm διαγράφει το τοπικό αντίγραφο εργασίας του αρχείου, αλλά όχι εάν χρησιμοποιείτε - cached. Εδώ είναι το αποτέλεσμα της βοήθειας git rm: - προσωρινά αποθηκευμένο Χρησιμοποιήστε αυτήν την επιλογή για να σταματήσετε και να αφαιρέσετε διαδρομές μόνο από το ευρετήριο. Τα αρχεία δέντρου που λειτουργούν, είτε τροποποιημένα είτε όχι, θα παραμείνουν. Προχωρώ στη χρήση git rm - προσωρινά αποθηκευμένο. για να αφαιρέσετε τα πάντα και να ξεκινήσετε ξανά. Δεν λειτούργησε όμως, γιατί κατά την προσθήκη. είναι αναδρομική, αποδεικνύεται ότι χρειάζεται rm για να επαναληφθεί. Στεναγμός. git rm -r - προσωρινά αποθηκευμένο. Εντάξει, τώρα επέστρεψα στο σημείο που ξεκίνησα. Την επόμενη φορά που θα χρησιμοποιήσω το -n για να κάνω μια στεγνή εκτέλεση και να δω τι θα προστεθεί: git add -n. Έφτιαξα τα πάντα σε ένα ασφαλές μέρος, προτού εμπιστευτώ τη βοήθεια του git σχετικά με το - cache που δεν καταστρέφει τίποτα (και τι γίνεται αν το έκανα λάθος). | Εάν πληκτρολογήσετε: κατάσταση git Το Git θα σας πει τι είναι σταδιακό κ.λπ., συμπεριλαμβανομένων οδηγιών για το πώς να σταματήσετε: χρησιμοποιήστε το "git reset HEAD ..." για να σταματήσετε Θεωρώ ότι ο Git κάνει πολύ καλή δουλειά να με ωθεί να κάνει το σωστό σε καταστάσεις όπως αυτή. Σημείωση: Οι πρόσφατες εκδόσεις Git (1.8.4.x) άλλαξαν αυτό το μήνυμα: (χρησιμοποιήστε το "git rm - cached ..." για να σταματήσετε) | Για διευκρίνιση: git add μετακινήσεις αλλαγών από τον τρέχοντα κατάλογο εργασίας στην περιοχή σταδιοποίησης (ευρετήριο) Αυτή η διαδικασία ονομάζεται σταδιοποίηση. Έτσι, η πιο φυσική εντολή για τη σταδιοποίηση των αλλαγών (αλλαγμένα αρχεία) είναι η προφανής: στάδιο git Το git add είναι απλώς ένα ψευδώνυμο ευκολότερο στον τύπο για το στάδιο git Κρίμα που δεν υπάρχουν εντολές git unstage ούτε git unadd. Το σχετικό είναι πιο δύσκολο να μαντέψει κανείς ή να το θυμηθεί, αλλά είναι αρκετά προφανές: επαναφορά git HEAD - Μπορούμε εύκολα να δημιουργήσουμε ένα ψευδώνυμο για αυτό: git config --global alias.unadd 'reset HEAD -' git config --global alias.unstage "reset HEAD -" Και τέλος, έχουμε νέες εντολές: git add file1 git stage αρχείο2 git unadd αρχείο2 git unstage αρχείο1 Προσωπικά, χρησιμοποιώ ακόμη μικρότερα ψευδώνυμα: git a # Για στάση git u # Για στάση | Μια προσθήκη στην αποδεκτή απάντηση, εάν το αρχείο που έχετε προσθέσει κατά λάθος ήταν τεράστιο, πιθανότατα θα παρατηρήσετε ότι, ακόμη και μετά την κατάργησή του από το ευρετήριο με το "git reset", φαίνεται ότι εξακολουθεί να καταλαμβάνει χώρο στον κατάλογο .git. Αυτό δεν πρέπει να ανησυχείτε. το αρχείο είναι πράγματι ακόμα στο αποθετήριο, αλλά μόνο ως "χαλαρό αντικείμενο". Δεν θα αντιγραφεί σε άλλα αποθετήρια (μέσω κλώνου, ώθησης) και ο χώρος θα ανακτηθεί τελικά - αν και ίσως όχι πολύ σύντομα. Εάν ανησυχείτε, μπορείτε να εκτελέσετε: git gc --prune = τώρα Ενημέρωση (αυτό που ακολουθεί είναι η προσπάθειά μου να ξεκαθαρίσω κάποια σύγχυση που μπορεί να προκύψει από τις πιο θετικές απαντήσεις): Λοιπόν, ποια είναι η πραγματική αναίρεση του git add; git reset HEAD ; ή git rm - αποθηκευμένο ; Ακριβώς μιλώντας, και αν δεν κάνω λάθος: κανένα. Το git add δεν μπορεί να αναιρεθεί - με ασφάλεια, γενικά. Ας θυμηθούμε πρώτα τι κάνει το git add : Εάν το δεν είχε προηγουμένως παρακολουθεί, το git add το προσθέτειτην προσωρινή μνήμη, με το τρέχον περιεχόμενό της. Εάν το είχε ήδη παρακολουθηθεί, το git add αποθηκεύει το τρέχον περιεχόμενο (στιγμιότυπο, έκδοση) στην προσωρινή μνήμη. Στο Git, αυτή η ενέργεια εξακολουθεί να ονομάζεται προσθήκη, (όχι απλώς να την ενημερώσετε), επειδή δύο διαφορετικές εκδόσεις (στιγμιότυπα) ενός αρχείου θεωρούνται δύο διαφορετικά στοιχεία: ως εκ τούτου, προσθέτουμε πράγματι ένα νέο στοιχείο στην προσωρινή μνήμη, για να είναι τελικά διαπράχθηκε αργότερα. Υπό το πρίσμα αυτό, η ερώτηση είναι ελαφρώς ασαφής: Πρόσθετα κατά λάθος αρχεία χρησιμοποιώντας την εντολή ... Το σενάριο του OP φαίνεται να είναι το πρώτο (αρχείο χωρίς παρακολούθηση), θέλουμε το "αναίρεση" να αφαιρέσει το αρχείο (όχι μόνο το τρέχον περιεχόμενο) από τα στοιχεία που παρακολουθούνται. Εάν συμβαίνει αυτό, τότε είναι εντάξει να τρέξετε git rm - cached . Και θα μπορούσαμε επίσης να τρέξουμε το git reset HEAD . Αυτό είναι γενικά προτιμότερο, επειδή λειτουργεί και στα δύο σενάρια: κάνει επίσης την αναίρεση όταν προσθέσαμε λάθος μια έκδοση ενός ήδη παρακολουθημένου στοιχείου. Υπάρχουν όμως δύο προειδοποιήσεις. Πρώτον: Υπάρχει (όπως επισημαίνεται στην απάντηση) μόνο ένα σενάριο στο οποίο το git reset HEAD δεν λειτουργεί, αλλά το git rm - cached κάνει: ένα νέο αποθετήριο (χωρίς δεσμεύσεις). Αλλά, στην πραγματικότητα, πρόκειται για πρακτικά άσχετη περίπτωση. Δεύτερον: Λάβετε υπόψη ότι το GIT reset HEAD δεν μπορεί να ανακτήσει μαγικά τα προηγούμενα αποθηκευμένα περιεχόμενα του αρχείου, απλώς το συγχρονίζει ξανά από το HEAD. Εάν το λάθος μας git προσθέσει αντικατέστησε μια προηγούμενη σταδιακή έκδοση χωρίς δέσμευση, δεν μπορούμε να την ανακτήσουμε. Γι 'αυτό, αυστηρά, δεν μπορούμε να αναιρέσουμε [*]. Παράδειγμα: $ git init $ echo "version 1"> file.txt $ git add file.txt # Πρώτη προσθήκη του file.txt $ git commit -m "πρώτη δέσμευση" $ echo "version 2"> file.txt $ git add file.txt # Stage (Don't komitmen) "έκδοση 2" του file.txt $ git diff --cached file.txt - μετατροπή 1 + έκδοση 2 $ echo "version 3"> file.txt $ git diff file.txt - μετατροπή 2 + έκδοση 3 $ Git add file.txt # Ωχ εμείς δεν σημαίνει αυτό $ git reset HEAD file.txt # Αναίρεση; $ git diff --cached file.txt # Χωρίς διαφορετικό, φυσικά. στάδιο == ΚΕΦΑΛΙ $ git diff file.txt # Έχουμε αμετάκλητα την "έκδοση 2" - μετατροπή 1 + έκδοση 3 Φυσικά, αυτό δεν είναι πολύ κρίσιμο εάν ακολουθούμε τη συνήθη τεμπέληρη ροή εργασίας του να κάνουμε «git add» μόνο για την προσθήκη νέων αρχείων (περίπτωση 1) και ενημερώνουμε νέα περιεχόμενα μέσω της εντολής komit, git commit. * (Επεξεργασία: τα παραπάνω είναι πρακτικά σωστά, αλλά εξακολουθούν να υπάρχουν μερικοί ελαφροί / περίπλοκοι τρόποι για την ανάκτηση αλλαγών που πραγματοποιήθηκαν, αλλά δεν είχαν δεσμευτεί και στη συνέχεια αντικατασταθούν - δείτε τα σχόλια των Johannes Matokic και iolsmit) | Αναίρεση ενός αρχείου που έχει ήδη προστεθεί είναι αρκετά εύκολο χρησιμοποιώντας το Git. Για επαναφορά του myfile.txt, που έχουν ήδη προστεθεί, χρησιμοποιήστε: git reset HEAD myfile.txt Εξήγηση: Αφού δημιουργήσετε ανεπιθύμητα αρχεία, για αναίρεση, μπορείτε να κάνετε επαναφορά git. Το Head είναι το κεφάλι του αρχείου σας στην τοπική και η τελευταία παράμετρος είναι το όνομα του αρχείου σας. Έχω δημιουργήσει τα βήματα στην παρακάτω εικόνα για περισσότερες λεπτομέρειες για εσάς, συμπεριλαμβανομένων όλων των βημάτων που μπορεί να συμβούν σε αυτές τις περιπτώσεις: | git rm - προσωρινά αποθηκευμένο. -ρ θα "καταργήσει την προσθήκη" ό, τι έχετε προσθέσει από τον τρέχοντα κατάλογό σας αναδρομικά | Τρέξιμο Γκι Γκι και αφαιρέστε όλα τα αρχεία χειροκίνητα ή επιλέγοντας όλα αυτά και κάνοντας κλικ στο unstage από το κουμπί δέσμευσης. | Η ερώτηση δεν τίθεται σαφώς. Ο λόγος είναι ότι το git add έχει δύο σημασίες: προσθέτοντας ένα νέο αρχείο στην περιοχή σταδιοποίησης και στη συνέχεια αναιρέστε με το αρχείο git rm προσθέτοντας ένα τροποποιημένο αρχείο στην περιοχή σταδιοποίησης και στη συνέχεια αναιρέστε με το GIT reset HEAD file. Σε περίπτωση αμφιβολίας, χρησιμοποιήστε git reset HEAD αρχείο Επειδή κάνει το αναμενόμενο πράγμα και στις δύο περιπτώσεις. Προειδοποίηση: εάν κάνετε git rm - cached αρχείο σε ένα αρχείο που τροποποιήθηκε (ένα αρχείο που υπήρχε πριν στο αποθετήριο), τότε το αρχείο θα αφαιρεθεί στο git commit! Θα εξακολουθεί να υπάρχει στο σύστημα αρχείων σας, αλλά εάν κάποιος άλλος τραβήξει τη δέσμευσή σας, το αρχείο θα διαγραφεί από το δέντρο εργασίας του. Η κατάσταση git θα σας πει εάν το αρχείο ήταν νέο αρχείο ή τροποποιήθηκε: Σε πλοίαρχο υποκαταστήματος Αλλαγές που πρέπει να πραγματοποιηθούν: (χρησιμοποιήστε το "git reset HEAD ..." για να σταματήσετε) νέο αρχείο: my_new_file.txt τροποποιήθηκε: my_modified_file.txt | Το Git έχει εντολές για κάθε δράση που μπορεί να φανταστεί κανείς, αλλά χρειάζεται εκτεταμένη γνώση για να διορθώσει τα πράγματα και γι 'αυτό είναι αντίθετα διαισθητικό στην καλύτερη ... Τι κάνατε πριν: Άλλαξε ένα αρχείο και χρησιμοποίησε το git add., Ή το git add . Τι θέλεις: Καταργήστε το αρχείο από το ευρετήριο, αλλά διατηρήστε το σε έκδοση και αφήστε το με μη δεσμευμένες αλλαγές στο αντίγραφο εργασίας: git reset HEAD Επαναφορά του αρχείου στην τελευταία κατάσταση από το κεφάλι, αναιρώντας τις αλλαγές και την απομάκρυνση τους από το δείκτη: # Think "svn revert " IIRC. git reset HEAD git ολοκλήρωση αγοράς # Εάν έχετε ένα όνομα " " όπως " ", χρησιμοποιήστε: git checkout - Αυτό απαιτείται επειδή η επαναφορά git - το σκληρό HEAD δεν θα λειτουργεί με μεμονωμένα αρχεία. Αφαιρέστε το από το ευρετήριο και την έκδοση, διατηρώντας το αρχείο χωρίς έκδοση με αλλαγές στο αντίγραφο εργασίας: git rm - προσωρινά αποθηκευμένο Αφαιρέστε το από το αντίγραφο εργασίας και την πλήρη έκδοση: git rm | Εάν είστε στην αρχική σας δέσμευση και δεν μπορείτε να χρησιμοποιήσετε το gitεπαναφέρετε, απλώς δηλώστε "Git πτώχευση" και διαγράψτε το φάκελο .git και ξεκινήστε ξανά | Σύμφωνα με πολλές από τις άλλες απαντήσεις, μπορείτε να χρησιμοποιήσετε το git reset ΑΛΛΑ: Βρήκα αυτήν την υπέροχη μικρή ανάρτηση που προσθέτει πραγματικά την εντολή Git (καλά, ένα ψευδώνυμο) για το git unadd: δείτε το git unadd για λεπτομέρειες ή .. Απλά, git config --global alias.unadd "επαναφορά HEAD" Τώρα μπορείς git unadd foo.txt bar.txt | Χρησιμοποιήστε το git add -i για να καταργήσετε αρχεία που μόλις προσθέσατε από την επερχόμενη δέσμευσή σας. Παράδειγμα: Προσθήκη του αρχείου που δεν θέλετε: $ git add foo Κατάσταση $ git # Σε κύριο κλάδο # Αλλαγές που πρέπει να πραγματοποιηθούν: # (χρησιμοποιήστε το "git reset HEAD ..." για να σταματήσετε) # # νέο αρχείο: foo # # Μη παρακολουθημένα αρχεία: # (χρησιμοποιήστε το "git add ..." για να συμπεριλάβετε σε αυτό που θα δεσμευτεί) # [...] # Πηγαίνοντας σε διαδραστική προσθήκη για να αναιρέσετε την προσθήκη σας (οι εντολές που πληκτρολογούνται στο git εδώ είναι "r" (revert), "1" (πρώτη καταχώριση στη λίστα revert shows), "return" για διακοπή της λειτουργίας επαναφοράς και "q" (εγκαταλείπω): $ git add -i σταδιακή μη σταδιακή διαδρομή 1: + 1 / -0 τίποτα άλλο *** Εντολές *** 1: [s] tatus 2: [u] pdate 3: [r] evert 4: [a] dd unracked 5: [p] atch 6: [d] iff 7: [q] uit 8: [h] elp Τι τώρα> r σταδιακή μη σταδιακή διαδρομή 1: + 1 / -0 τίποτα [f] oo Επαναφορά >> 1 σταδιακή μη σταδιακή διαδρομή * 1: + 1 / -0 τίποτα [f] oo Επαναφορά >> σημείωση: το foo δεν έχει παρακολουθηθεί τώρα. επανήλθε μια διαδρομή *** Εντολές *** 1: [s] tatus 2: [u] pdate 3: [r] evert 4: [a] dd unracked 5: [p] atch 6: [d] iff 7: [q] uit 8: [h] elp Τι τώρα> q Αντίο. $ Αυτό είναι! Αυτή είναι η απόδειξή σας, δείχνοντας ότι το "foo" επιστρέφει στη λίστα χωρίς παρακολούθηση: Κατάσταση $ git # Στον κύριο κλάδο # Μη παρακολουθημένα αρχεία: # (χρησιμοποιήστε το "git add ..." για να συμπεριλάβετε σε αυτό που θα δεσμευτεί) # [...] # φουο τίποτα δεν προστέθηκε για δέσμευση, αλλά δεν υπάρχουν αρχεία που δεν παρακολουθούνται (χρησιμοποιήστε το "git add" για παρακολούθηση) $ | Το git remove ή το git rm μπορούν να χρησιμοποιηθούν για αυτό, με τη σημαία cache. Δοκιμάστε: βοήθεια git rm | Εδώ είναι ένας τρόπος να αποφύγετε αυτό το ενοχλητικό πρόβλημα όταν ξεκινάτε ένα νέο έργο: Δημιουργήστε τον κύριο κατάλογο για το νέο σας έργο. Εκτελέστε το git init. Τώρα δημιουργήστε ένα αρχείο .gitignore (ακόμα κι αν είναι κενό). Δέσμευση του αρχείου .gitignore. Το Git καθιστά πολύ δύσκολο να κάνετε επαναφορά git εάν δεν έχετε δεσμεύσεις. Εάν δημιουργήσετε μια μικρή αρχική δέσμευση μόνο για να έχετε ένα, μετά μπορείτε να κάνετε git add -A και git reset όσες φορές θέλετε για να τα πάρετε όλα σωστά. Ένα άλλο πλεονέκτημα αυτής της μεθόδου είναι ότι εάν αντιμετωπίσετε προβλήματα τερματισμού γραμμής αργότερα και πρέπει να ανανεώσετε όλα τα αρχεία σας, είναι εύκολο: Δείτε την αρχική δέσμευση. Αυτό θα αφαιρέσει όλα τα αρχεία σας. Στη συνέχεια, ελέγξτε ξανά την πιο πρόσφατη δέσμευσή σας. Αυτό θα ανακτήσει νέα αντίγραφα των αρχείων σας, χρησιμοποιώντας τις τρέχουσες ρυθμίσεις λήξης γραμμής. | Ίσως το Git έχει εξελιχθεί από τότε που δημοσιεύσατε την ερώτησή σας. $> git - μετατροπή έκδοση git 1.6.2.1 Τώρα, μπορείτε να δοκιμάσετε: git reset HEAD. Αυτό πρέπει να είναι αυτό που ψάχνετε. | Σημειώστε ότι εάν δεν καθορίσετε μια αναθεώρηση, τότε πρέπει να συμπεριλάβετε ένα διαχωριστικό. Παράδειγμα από την κονσόλα μου: επαναφορά git fatal: αμφίσημο όρισμα " ": άγνωστη αναθεώρηση ή διαδρομή που δεν βρίσκεται στο δέντρο εργασίας. Χρησιμοποιήστε το '-' για να διαχωρίσετε τις διαδρομές από τις αναθεωρήσεις επαναφορά git - Ασταθείς αλλαγές μετά την επαναφορά: Μ (Έκδοση Git 1.7.5.4) | Για να αφαιρέσετε νέα αρχεία από την περιοχή στάσης (και μόνο σε περίπτωση νέου αρχείου), όπως προτείνεται παραπάνω: git rm - προσωρινά αποθηκευμένο αρχείο Χρησιμοποιήστε rm - cached μόνο για νέα αρχεία που προστέθηκαν κατά λάθος. | Για να επαναφέρετε κάθε αρχείο σε έναν συγκεκριμένο φάκελο (και τους υποφακέλους του), μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή: επαναφορά git * | Χρησιμοποιήστε την εντολή * για να χειριστείτε πολλά αρχεία κάθε φορά: git reset HEAD * .prj git reset HEAD * .bmp git reset HEAD * gdb * και τα λοιπά. | Απλώς πληκτρολογήστε git reset, θα επανέλθει πίσω και είναι σαν να μην πληκτρολογήσατε ποτέ git add. από την τελευταία σας δέσμευση. Βεβαιωθείτε ότι έχετε δεσμευτεί στο παρελθόν. | Ας υποθέσουμε ότι δημιουργώ ένα νέο αρχείο, newFile.txt: Ας υποθέσουμε ότι προσθέτω το αρχείο κατά λάθος, git add newFile.txt: Τώρα θέλω να αναιρέσω αυτήν την προσθήκη, πριν από τη δέσμευση, git reset newFile.txt: | Για ένα συγκεκριμένο αρχείο: git reset my_file.txt git checkout my_file.txt Για όλα τα προστιθέμενα αρχεία: επαναφορά git. git ολοκλήρωση αγοράς. Σημείωση: το ταμείο αλλάζει τον κώδικα στα αρχεία και μεταβαίνει στην τελευταία ενημερωμένη (δεσμευμένη) κατάσταση. Η επαναφορά δεν αλλάζει τους κωδικούς. απλώς επαναφέρει την κεφαλίδα. | Για να αναιρέσετε την προσθήκη git, χρησιμοποιήστε: git reset όνομα αρχείου | Αυτή η εντολή θα καταργήσει τις αλλαγές σας: git reset HEAD filename.txt Μπορείτε επίσης να χρησιμοποιήσετε git add -p για να προσθέσετε τμήματα αρχείων. | Υπάρχει επίσης διαδραστική λειτουργία: git add -i Επιλέξτε την επιλογή 3 για να καταργήσετε την προσθήκη αρχείων. Στην περίπτωσή μου συχνά θέλω να προσθέσω περισσότερα από ένα αρχεία, και με διαδραστική λειτουργία μπορείτε να χρησιμοποιήσετε αριθμούς όπως αυτό για να προσθέσετε αρχεία. Αυτό θα πάρει όλα εκτός από 4: 1, 2, 3 και 5 Για να επιλέξετε μια ακολουθία, απλώς πληκτρολογήστε 1-5 για να πάρετε όλα από 1 έως 5. Git αρχεία σταδιοποίησης | git add myfile.txt # Αυτό θα προσθέσει το αρχείο σας στη λίστα που πρέπει να δεσμευτεί Πολύ αντίθετο από αυτήν την εντολή είναι, git reset HEAD myfile.txt # Αυτό θα αναιρεθείτο. έτσι, θα είστε στην προηγούμενη κατάσταση. Το καθορισμένο θα είναι ξανά στη λίστα χωρίς παρακολούθηση (προηγούμενη κατάσταση). Θα επαναφέρει το κεφάλι σας με αυτό το καθορισμένο αρχείο. οπότε, αν το κεφάλι σας δεν έχει αυτό σημαίνει, θα το επαναφέρετε απλώς. | git reset filename.txt Θα καταργήσει ένα αρχείο με όνομα filename.txt από το τρέχον ευρετήριο, την περιοχή "πρόκειται να δεσμευτεί", χωρίς να αλλάξει τίποτα άλλο. | git reset filename.txt Θα καταργήσει ένα αρχείο με όνομα filename.txt από το τρέχον ευρετήριο, την περιοχή "πρόκειται να δεσμευτεί", χωρίς να αλλάξει τίποτα άλλο. | Στο Sourcetree μπορείτε να το κάνετε εύκολα μέσω του GUI. Μπορείτε να ελέγξετε ποια εντολή χρησιμοποιεί η Sourcetree για την αποσυμπίεση ενός αρχείου. Δημιούργησα ένα νέο αρχείο και το πρόσθεσα στο Git. Στη συνέχεια, το σταμάτησα χρησιμοποιώντας το Sourcetree GUI. Αυτό είναι το αποτέλεσμα: Αποσυμπίεση αρχείων [08/12/15 10:43] git -c diff.mnemonicprefix = false -c core.quotepath = false -c credential.helper = sourcetree reset -q - path / to / file / filename.java Το Sourcetree χρησιμοποιεί επαναφορά για την αποσυμπίεση νέων αρχείων. | 1 2 Επόμενο Πολύ ενεργή ερώτηση. Κερδίστε 10 φήμη για να απαντήσετε σε αυτήν την ερώτηση. Η απαίτηση φήμης συμβάλλει στην προστασία αυτής της ερώτησης από ανεπιθύμητες ενέργειες και μη απαντήσεις. Δεν είναι η απάντηση που ψάχνετε; Περιηγηθείτε σε άλλες ερωτήσεις με ετικέτα git version-control git-commit git-stage ή κάντε τη δική σας ερώτηση.